clear; % 清除工作区中的所有变量
clc;   % 清除命令窗口

pkg load symbolic;

syms x y a b c;

f = x^2 + 3*x + 2;
g = sin(x);
disp(g)

f_subs = subs(f, x, 2);
disp('替换后的值:');
disp(f_subs);

f_eval = eval(f_subs);
disp('计算后的值:');
disp(f_eval);

f_double = double(f_eval);
disp('双精度值:');
disp(f_double);

% 简化符号表达式
f_simplify = simplify(f);
disp('简化后的表达式:');
disp(f_simplify);

% 因式分解
f_factor = factor(f);
disp('因式分解后的表达式:');
disp(f_factor);

% 展开符号表达式
f_expand = expand((x + 1)*(x + 2));
disp('展开后的表达式:');
disp(f_expand);

% 收集同类项
f_collect = collect(x^2 + x*y + x*y + y^2, x);
disp('收集同类项后的表达式:');
disp(f_collect);

% 提取分子和分母
[num, den] = numden(x/y + y/x);
disp('分子:');
disp(num);
disp('分母:');
disp(den);

% 复合函数

% 符号求和
symsum_result = symsum(x^2, x, 0, 10);
disp('符号求和结果:');
disp(symsum_result);

% 函数反演
finverse_result = finverse(g);
disp('函数反演结果:');
disp(finverse_result);

% 泰勒展开
taylor_result = taylor(g, x, 0, 'Order', 6);
disp('泰勒展开结果:');
disp(taylor_result);

% 极限
limit_result = limit(sin(x)/x, x, 0);
disp('极限结果:');
disp(limit_result);

% 导数
diff_result = diff(g, x);
disp('导数结果:');
disp(diff_result);

% 积分
int_result = int(g, x);
disp('积分结果:');
disp(int_result);

% 双重积分
dblquad_result = dblquad(@(x, y) x*y, 0, 1, 0, 1);
disp('双重积分结果:');
disp(dblquad_result);

% 多项式根
roots_result = roots([1 3 2]);
disp('多项式根:');
disp(roots_result);

% 方程求解
solve_result = solve(x^2 + 3*x + 2 == 0, x);
disp('方程求解结果:');
disp(solve_result);

% 数值求解方程
fsolve_result = fsolve(@(x) x^2 + 3*x + 2, 0);
disp('数值求解方程结果:');
disp(fsolve_result);

% 微分方程求解
dsolve_result = dsolve('Dx = -a*x', 'x(0) = 1', 't');
disp('微分方程求解结果:');
disp(dsolve_result);

% 多项式拟合
x_data = 0:0.1:1;
y_data = sin(x_data);
polyfit_result = polyfit(x_data, y_data, 3);
disp('多项式拟合结果:');
disp(polyfit_result);

% 多项式值计算
polyval_result = polyval(polyfit_result, x_data);
disp('多项式值计算结果:');
disp(polyval_result);

% 一维插值
interp1_result = interp1(x_data, y_data, 0.5, 'linear');
disp('一维插值结果:');
disp(interp1_result);

% 二维插值
[X, Y] = meshgrid(0:0.1:1, 0:0.1:1);
Z = X.^2 + Y.^2;
interp2_result = interp2(X, Y, Z, 0.5, 0.5, 'linear');
disp('二维插值结果:');
disp(interp2_result);

% 网格数据插值
griddata_result = griddata(X, Y, Z, 0.5, 0.5, 'linear');
disp('网格数据插值结果:');
disp(griddata_result);

% 最小化搜索
fminsearch_result = fminsearch(@(x) (x - 2).^2, 0);
disp('最小化搜索结果:');
disp(fminsearch_result);

% 无约束最小化
fminunc_result = fminunc(@(x) (x - 2).^2, 0);
disp('无约束最小化结果:');
disp(fminunc_result);

% 约束最小化
fmincon_result = fmincon(@(x) (x - 2).^2, 0, [], [], [], [], 0, 3);
disp('约束最小化结果:');
disp(fmincon_result);

% 目标函数值
fval_result = (fmincon_result - 2).^2;
disp('目标函数值:');
disp(fval_result);
